package middleware.p2p;

/**
 *	Interfaccia che definisce l'insieme minimo di operazioni necessarie ad un servizio di Discovery.
 *	Il servizio di Discovery si deve occupare di tener traccia dei Worker all'interno della rete.
 *	Il discovery deve permettere l'inserimento e l'aggiornamento dei WorkerDescriptor e garantire la possibilità di ottenere il Worker 
 *	adatto ad eseguire un Task descritto da un TaskDescriptor.
 *	@see TaskDescriptor
 *	@see WorkerDescriptor
 */
public interface Discovery {
	/**
	 *	Metodo per ottenere il Worker adatto all'esecuzione di un task descritto dal TaskDescriptor.
	 * 	@param ts	TaskDescriptor associato al Task da eseguire
	 * 	@return		L'indirizzo del Worker capace di eseguire il task desiderato.
	 */
	public Address getWorker(TaskDescriptor ts);
	/**
	 * 	Metodo che si occupa dell'aggiornamento del Descrittore di un Worker.
	 * 	@param	index	Indice del WorkerDescriptor da aggiornare
	 * 	@param 	wd		WorkerDescriptor aggiorato.
	 * 	@return	L'indice del WorkerDescriptor aggiornato.
	 */
	public int updateWorker(int index,WorkerDescriptor wd);
	/**
	 * 	Metodo per aggiungere un WorkerDescriptor a quelli conosciuti dal Discovery. 
	 * 	@param wd	WorkerDescriptor del Worker da aggiungere.
	 * 	@return		L'indice del WorkerDescriptor inseriti.
	 */
	public int addWorker(WorkerDescriptor wd);
}
